package com.tron.dobest.java.tronoptional;

import java.util.Optional;

/**
 * @description optional测试类
 * @auther TRON
 * @create 2020-02-25
 */
public class TronOptionalTest {


    public static void main(String[] args) {
        /**
         * Exception in thread "main" java.util.NoSuchElementException: No value present
         */
//        emptyTest();

        /**
         * dException in thread "main" java.util.NoSuchElementException: No value present
         */
//        ofNullAbleTest();


        OpData opData = new OpData();
        Optional<OpData> opData1 = ofNullAbleTest(opData);
        //true
        System.out.println(opData1.isPresent());
        //OpData(a=null, b=null, c=null)
        System.out.println(opData1.get());
        //直接获取option中的值，如果为null则获取失败
        Optional<String> s1 = opData1.map(OpData::getA);
        System.out.println(s1.isPresent());

        System.out.println("==========================");

        Optional<OpData> opData2 = ofNullAbleTest(null);
        //false
        System.out.println(opData2.isPresent());

        //获取失败时，返回null
        OpData opData3 = opData2.orElse(null);
        //true
        System.out.println(opData3 == null);

        //直接获取值
        Optional<String> s = opData2.map(OpData::getA);
        System.out.println(s.isPresent());


    }

    private static Optional<OpData> ofNullAbleTest(OpData opData) {
        Optional<OpData> dataOptional = Optional.ofNullable(opData);
        System.out.println(dataOptional);
        return dataOptional;
    }

    private static void ofNullAbleTest() {
        Optional<OpData> objectOptional = ofNullAbleTest(null);
        System.out.println(objectOptional.get());
    }

    private static void emptyTest() {
        Optional<Object> empty = Optional.empty();
        System.out.println(empty.get());
    }


}
